﻿//给定一个二进制数组 nums 和一个整数 k，假设最多可以翻转 k 个 0 ，
//则返回执行操作后 数组中连续 1 的最大个数 。
//
//输入：nums = [1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0], K = 2
//输出：6
//解释：[1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1]
//粗体数字从 0 翻转到 1，最长的子数组长度为 6。
//
//输入：nums = [0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1], K = 3
//输出：10
//解释：[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1]
//粗体数字从 0 翻转到 1，最长的子数组长度为 10。
//
//提示：
//	1 <= nums.length <= 10^5
//	nums[i] 不是 0 就是 1
//	0 <= k <= nums.length

class Solution {
public:
    int longestOnes(vector<int>& nums, int k) {
        int ret = 0;
        for (int left = 0, right = 0, zero = 0; right < nums.size(); right++) {
            if (nums[right] == 0)
                zero++; // 进窗⼝

            while (zero > k) // 判断

                if (nums[left++] == 0)
                    zero--; // 出窗⼝

            ret = max(ret, right - left + 1); // 更新结果
        }
        return ret;
    }
};